package pl.edu.pw.elka.tinyrepo.gate.server;

import java.io.Serializable;
import java.rmi.Remote;
import java.rmi.RemoteException;

import pl.edu.pw.elka.tinyrepo.dataserver.server.DataServerFacade;

/**
 * Fasada dla serwera danych, za pomoca ktorej komunikuje 
 * sie z brama.
 * 
 * @author Piotr Jarosik
 */
public interface GateFacade extends Remote, Serializable {
   
   /**
    * Rejestracja serwera danych.
    * 
    * @param ds, port - numer portu, na ktorym slucha serwer danych
    * @throws RemoteException
    */
   public void register(DataServerFacade ds, Integer port) throws RemoteException;
   
   /**
    * Dodaje plik do deskryptora bramy o podanej sciezce i id.
    * Jedyna informacja o tym, ze wystapil konflikt nazw jest poprzez 
    * @param path
    * @param id
    * @retun true jezeli udalo sie czynnosc wykonac, w p.p. false.
    */
   public boolean putFile(String path, Integer id, Long size, Integer port) throws RemoteException;
   
   /**
    * Usuwa plik o podanej sciezce z deskryptorow bramy.
    * <b>UWAGA: oznacza to, ze w momencie otrzymania delete DS musi wiedziec
    * jaka jest rzeczywista sciezka do pliku w calym repozytorium - OTRZYMA TO
    * W MESSAGE BODY (danych) OD KLIENTA. </b> 
    * 
    * @param id
    * @retun true jezeli udalo sie czynnosc wykonac, w p.p. false.
    */
   public boolean dropFile(String path) throws RemoteException;
}
